package escenario;

import java.util.ArrayList;

import concurrencia.MonitorEspacio;

import sistemaDefensivo.BateriaDeMisiles;
import sistemaDefensivo.MisilDefensor;
import sistemaDefensivo.ServidorTerrestre;
import sistemaDefensivo.SistemaBateriaMisiles;
import sistemaDefensivo.SistemaDeRadar;
import sistemaEnemigo.GeneradorMisilesEnemigos;
import sistemaEnemigo.MisilEnemigo;

import escenario.Escenario;

public class Escenario {
	private ArrayList <BateriaDeMisiles> bateriaDeMisiles;
	private GeneradorMisilesEnemigos generadorMisilesEnemigos;
	
	private SistemaDeRadar radar;
	private ServidorTerrestre servidorTerrestre;
	private SistemaBateriaMisiles sistemaBateriaMisiles;
	private CollisionDetector collisionDetector;
	
	private MonitorEspacio espacio;
	
	private Thread hiloRadar;
	private Thread hiloServidorT;
	private Thread hilosistemaBM;
	private Thread hiloGeneradorME;
	private Thread hiloCollisionDetector;

	public Escenario(){
		radar  = new SistemaDeRadar(this);
		servidorTerrestre = new ServidorTerrestre(this);
		sistemaBateriaMisiles = new SistemaBateriaMisiles(this);
		generadorMisilesEnemigos = new GeneradorMisilesEnemigos(this);
		bateriaDeMisiles = new ArrayList<BateriaDeMisiles>();

		collisionDetector = new CollisionDetector(this);
		
		espacio = new MonitorEspacio();
		
		hiloRadar = new Thread(radar);
		hiloServidorT = new Thread(servidorTerrestre);
		hilosistemaBM = new Thread(sistemaBateriaMisiles);
		hiloGeneradorME = new Thread(generadorMisilesEnemigos);
		hiloCollisionDetector = new Thread(collisionDetector);
	}
	
    public void addMisilesEnemigos(MisilEnemigo misilEnemigo){
    	espacio.addMisilesEnemigos(misilEnemigo);
    }
    
    public MisilEnemigo getMisilesEnemigos(int pos){
    	return espacio.getMisilesEnemigos(pos);
    }
    
    public void setMisilesEnemigos(int pos, MisilEnemigo misilEnemigo){
    	espacio.setMisilesEnemigos(pos, misilEnemigo);
    }
    
    public int getSizeMisilesEnemigos(){
    	return espacio.getSizeMisilesEnemigos();
    }
    
    public void addMisilesDefensores(MisilDefensor misilDefensor){
    	espacio.addMisilesDefensores(misilDefensor);
    }
    
    public MisilDefensor getMisilesDefensores(int pos){
    	return espacio.getMisilesDefensores(pos);
    }
    
    public void setMisilesDefensores(int pos, MisilDefensor misilDefensor){
    	espacio.setMisilesDefensores(pos, misilDefensor);
    }
    
    public int getSizeMisilesDefensores(){
    	return espacio.getSizePosDefensores();
    }
    
    public void addPosEnemigos(IdPosicion posEnemigo){
    	espacio.addPosEnemigos(posEnemigo);
    }    
    
    public IdPosicion getPosEnemigo(int pos){
    	return espacio.getPosEnemigo(pos);
    }
    
    public void setPosEnemigos(int pos, IdPosicion idPosicion){
    	espacio.setPosEnemigos(pos, idPosicion);
    }
    
    public int getSizePosEnemigos(){
    	return espacio.getSizePosEnemigos();
    }
    
    public void addPosDefensores(IdPosicion posDefensor){
    	espacio.addPosDefensores(posDefensor);
    }
    
    public IdPosicion getPosDefensores(int pos){
    	return espacio.getPosDefensores(pos);
    }
    
    public void setPosDefensores(int pos, IdPosicion idPosicion){
    	espacio.setPosDefensores(pos, idPosicion);
    }
    
    public int getSizePosDefensores(){
    	return espacio.getSizePosDefensores();
    }

    
	public void addBateriaDeMisiles(BateriaDeMisiles bateriaDeMisiles) {
		this.bateriaDeMisiles.add(bateriaDeMisiles);
	}
		
	public BateriaDeMisiles getBateriaDeMisiles(int pos) {
		return bateriaDeMisiles.get(pos);
	}

	public GeneradorMisilesEnemigos getGeneradorMisilesEnemigos() {
		return generadorMisilesEnemigos;
	}

	public SistemaDeRadar getRadar() {
		return radar;
	}

	public ServidorTerrestre getServidorTerrestre() {
		return servidorTerrestre;
	}

	public SistemaBateriaMisiles getSistemaBateriaMisiles() {
		return sistemaBateriaMisiles;
	}

	public void iniciarEscenario(){
		hiloRadar.start();
		hiloServidorT.start();
		hilosistemaBM.start();
		hiloGeneradorME.start();
		
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		hiloCollisionDetector.start();
	}
}